﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 银行
{
    class Program
    {
        /*
            编写一个程序，用以接收用户输入的两个浮点型的数值，一个值表示用户
            想要存放在银行账户中的余额，另一个值表示用户想要从银行账户中提取的金额。
            实现存取款功能，
            用户功能选择：1、存款，2、取款
            取款时：
            当用户想要提取的金额大于余额时，请手动抛出一个ArgumentOutOfRangeException 参数超出范围的异常，异常信息可以写“取款金额大于余额，请重新输入”
            ，如此以确保取款金额始终不大于当前余额。
            操作结束，打印输出余额是多少。
            最后再添加catch一般异常 Exception，使得数据类型转换的异常也能被捕获到。
         */
        public static  User user = new User("阿三");
        static void Main(string[] args)
        {
            while (true)
            {
                Console.WriteLine("请用户功能选择：1、存款，2、取款");
                string choose=Console.ReadLine();
                int choice = GetNumber(choose);
                if (choice!=1 && choice!=2)
                {
                    Console.WriteLine("输入错误");
                    continue;
                }
                switch (choice)
                {
                    case 1:
                        //存款
                        deposit();
                        break;
                    case 2:
                        //取款
                        withdrawal();
                        break;
                    default:
                        Console.WriteLine("宝贝常来哦");
                        break;
                }

            }
        }

        private static int GetNumber(string s)
        {
            while (true)
            {
                try
                {
                    int a = Convert.ToInt32(s);
                    return a;
                }
                catch (Exception e)
                {
                    Console.WriteLine("请按规则办事");
                    Console.WriteLine(e.Message);
                    Console.WriteLine("请用户功能选择：1、存款，2、取款");
                    s = Console.ReadLine();
                }
            }
        }

        private static void withdrawal()
        {
             Console.WriteLine("请输入取出的金额");
            float get;
             while (true)
            {
                try
                {
                    get = float.Parse(Console.ReadLine());
                    break;
                }
                catch (Exception)
                {
                    Console.WriteLine("输入错误，重新输入");
                }
            }

            try
            {
                user.Get(get);
                Console.WriteLine($"取款成功,账户余额{user.Balance}");
            }
            catch (ArgumentOutOfRangeException a)
            {
                Console.WriteLine(a.Message);
                Console.WriteLine($"账户余额为{user.Balance}");
            }
        }

        private static void deposit()
        {
            Console.WriteLine("请输入存入的金额");
            float save;
            while (true)
            {
                try
                {
                    save = float.Parse(Console.ReadLine());
                    break;
                }
                catch (Exception e)
                {
                    Console.WriteLine("异常信息："+e.Message);
                    Console.WriteLine("输入错误，重新输入");
                }
            }
            user.Save(save);
            Console.WriteLine($"存入成功,账户余额{user.Balance}");
        }
    }
}
